// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Subsystems/GameInstanceSubsystem.h"
#include "Templates/SubclassOf.h"

#include "UObject/WeakObjectPtr.h"
#include "LyraLoadingScreenSubsystem.generated.h"

// 定义API宏
#define UE_API LYRAGAME_API

class UObject;
class UUserWidget;
struct FFrame;

/** 加载屏幕控件改变委托 */
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLoadingScreenWidgetChangedDelegate, TSubclassOf<UUserWidget>, NewWidgetClass);

/**
 * 在跨越地图转换的持久位置跟踪/存储当前加载屏幕配置
 */
UCLASS(MinimalAPI)
class ULyraLoadingScreenSubsystem : public UGameInstanceSubsystem
{
	GENERATED_BODY()

public:
	UE_API ULyraLoadingScreenSubsystem(); //构造函数

	// 设置要在加载屏幕控件主机内显示的加载屏幕控件类
	UFUNCTION(BlueprintCallable)
	UE_API void SetLoadingScreenContentWidget(TSubclassOf<UUserWidget> NewWidgetClass);

	// 返回最后设置的要在加载屏幕控件主机内显示的加载屏幕控件类
	UFUNCTION(BlueprintPure)
	UE_API TSubclassOf<UUserWidget> GetLoadingScreenContentWidget() const;

private:
	UPROPERTY(BlueprintAssignable, meta=(AllowPrivateAccess))
	FLoadingScreenWidgetChangedDelegate OnLoadingScreenWidgetChanged; //加载屏幕控件改变委托

	UPROPERTY()
	TSubclassOf<UUserWidget> LoadingScreenWidgetClass; //加载屏幕控件类
};

// 取消API宏定义
#undef UE_API